home *** CD-ROM | disk | FTP | other *** search
- /****************************/
- /* PROCESS.C */
- /* By Brian Greenstone */
- /****************************/
-
-
- /****************************/
- /* EXTERNALS */
- /****************************/
- #include <QD3D.h>
- #include <QD3DGeometry.h>
- #include <QD3DGroup.h>
- #include <QD3DMath.h>
- #include <QD3DView.h>
- #include <QD3DGroup.h>
- #include <QD3DTransform.h>
- #include <QD3DStorage.h>
-
- #include "myglobals.h"
- #include "misc.h"
- #include "process.h"
- #include "qd3d_support.h"
-
- extern float gFramesPerSecond;
-
-
- /****************************/
- /* PROTOTYPES */
- /****************************/
-
- static void InitModelWindow(void);
- static void BuildTestModel(void);
- static void CreateMyFogStyle(void);
-
-
- /****************************/
- /* CONSTANTS */
- /****************************/
-
- #define MODEL_WIND_ID 400
-
- #define MY_HITHER 10
- #define MY_YON 120
-
- /*********************/
- /* VARIABLES */
- /*********************/
-
- WindowPtr gModelWindow = nil;
- QD3DSetupOutputType gModelViewInfo;
- TQ3Object gModelGroup = nil;
- TQ3GroupObject gBaseGroup = nil;
-
- TQ3AttributeSet gTextureAttr;
-
- TQ3Matrix4x4 gTransformMatrix;
- TQ3Object gTransformObject = nil;
-
- TQ3FogStyleData gFogData;
- TQ3StyleObject gFogStyleObject = nil;
-
- TQ3ColorARGB gClearColor = {1,1,1,1};
-
-
-
- #pragma mark ========INITIALIZATION STUFF=========
-
- /******************** INIT TEST ************************/
-
- void InitTest(void)
- {
-
- /* INIT THE WINDOW */
-
- InitModelWindow();
-
-
- /* CREATE THE TEST MODEL */
-
- BuildTestModel();
-
-
- /* CREATE DISPLAY GROUP */
-
- gBaseGroup = Q3DisplayGroup_New(); // make display group
- Q3Matrix4x4_SetIdentity(&gTransformMatrix);
- gTransformObject = Q3MatrixTransform_New(&gTransformMatrix); // make transform object
-
- Q3Group_AddObject(gBaseGroup, gTransformObject); // add transform to group
-
- Q3Group_AddObject(gBaseGroup, gFogStyleObject); // add fog to it
-
- Q3Group_AddObject(gBaseGroup, gModelGroup); // add geometry to group
-
-
- /* DRAW THE WINDOW */
-
- DrawModelWindow();
- }
-
-
-
- /************** INIT MODEL WINDOW *******************/
-
- static void InitModelWindow(void)
- {
- QD3DSetupInputType viewDef;
- TQ3Point3D cameraFrom = { 0,0, 100 };
- TQ3Point3D cameraTo = { 0, 0, 0 };
- TQ3Vector3D cameraUp = { 0.0, 1.0, 0 };
- TQ3ColorRGB ambientColor = { 1.0, 1.0, 1.0 };
- TQ3ColorRGB fillColor = { 0.0, 1.0, 1.0 };
- TQ3Vector3D fillDirection1 = {1, -.3, -1 };
- TQ3Vector3D fillDirection2 = { -1, -.1, -.2 };
-
-
- /* CREATE THE WINDOW */
-
- gModelWindow = GetNewCWindow(MODEL_WIND_ID, nil,MOVE_TO_FRONT);
- if (gModelWindow == nil)
- DoFatalAlert("\pWhere did the GameWindow window go?");
- SetPort((GrafPtr)gModelWindow);
-
-
- /***********************/
- /* SET QD3D PARAMETERS */
- /***********************/
-
- viewDef.view.displayWindow = gModelWindow;
- viewDef.view.rendererType = kQ3RendererTypeInteractive;
- viewDef.view.clearColor = gClearColor;
- viewDef.view.paneClip.left = 0;
- viewDef.view.paneClip.right = 0;
- viewDef.view.paneClip.top = 0;
- viewDef.view.paneClip.bottom = 0;
-
- viewDef.styles.interpolation = kQ3InterpolationStyleVertex;
- viewDef.styles.backfacing = kQ3BackfacingStyleBoth;
- viewDef.styles.fill = kQ3FillStyleFilled;
- viewDef.styles.illuminationType = kQ3IlluminationTypeLambert;
-
- viewDef.camera.from = cameraFrom;
- viewDef.camera.to = cameraTo;
- viewDef.camera.up = cameraUp;
- viewDef.camera.hither = MY_HITHER;
- viewDef.camera.yon = MY_YON;
- viewDef.camera.fov = 1.0;
-
- viewDef.lights.ambientBrightness = .1;
- viewDef.lights.ambientColor = ambientColor;
- viewDef.lights.numFillLights = 1;
- viewDef.lights.fillDirection[0] = fillDirection1;
- viewDef.lights.fillDirection[1] = fillDirection2;
- viewDef.lights.fillColor[0] = fillColor;
- viewDef.lights.fillColor[1] = fillColor;
- viewDef.lights.fillBrightness[0] = 1.1;
- viewDef.lights.fillBrightness[1] = 0.7;
-
- QD3D_SetupWindow(&viewDef, &gModelViewInfo);
-
-
- /* CREATE FOG STYLE OBJECT */
-
- CreateMyFogStyle();
- }
-
-
- /******************* CREATE MY FOG STYLE OBJECT *****************/
-
- static void CreateMyFogStyle(void)
- {
-
- /* SET MY PARAMETERS */
-
- gFogData.state = kQ3On; // fog is on
- gFogData.mode = kQ3FogModeLinear; // fog is linear
- gFogData.fogStart = 60; // start @ front
- gFogData.fogEnd = MY_YON; // end in back
- gFogData.density = 1.0; // goes totally foggy at back
- gFogData.color = gClearColor; // fog color is same as clear color
-
-
- /* MAKE NEW OBJECT */
-
- gFogStyleObject = Q3FogStyle_New(&gFogData);
- if (gFogStyleObject == nil)
- DoFatalAlert("\pCreateMyFogStyle: Q3FogStyle_New failed!");
-
- }
-
-
-
- /********************* BUILD TEST MODEL **************************/
-
- static void BuildTestModel(void)
- {
- TQ3TriMeshData myTriMeshData;
- TQ3TriMeshAttributeData vertexAttribs[3],faceAttribs;
-
- TQ3Point3D points[3] =
- {
- 0,35,0,
- -35,-35,0,
- 35,-35,0
- };
-
- TQ3Vector3D vertexNormals[3] =
- {
- 0,0,1,
- 0,0,1,
- 0,0,1
- };
-
- TQ3Vector3D faceNormals[1] =
- {
- 0,0,1
- };
-
- TQ3Param2D uvArray[3] =
- {
- .5,1,
- 0,0,
- 1,0
- };
-
-
- TQ3TriMeshTriangleData triangles[1] =
- {
- 0,1,2
- };
-
-
- TQ3SurfaceShaderObject texture;
-
-
- /* FIRST LOAD THE TEXTUREMAP */
-
- texture = QD3D_GetTextureMap(128,nil);
-
- gTextureAttr = Q3AttributeSet_New();
- Q3AttributeSet_Add(gTextureAttr, kQ3AttributeTypeSurfaceShader, &texture);
-
- /* BUILD MAIN TRIMESH DATA STRUCTURE */
-
- myTriMeshData.triMeshAttributeSet = gTextureAttr;
-
- myTriMeshData.numTriangles = 1;
- myTriMeshData.triangles = &triangles[0];
-
- myTriMeshData.numTriangleAttributeTypes = 1;
- myTriMeshData.triangleAttributeTypes = &faceAttribs;
-
- myTriMeshData.numEdges = 0;
- myTriMeshData.edges = nil;
- myTriMeshData.numEdgeAttributeTypes = 0;
- myTriMeshData.edgeAttributeTypes = nil;
-
- myTriMeshData.numPoints = 3;
- myTriMeshData.points = &points[0];
-
- myTriMeshData.numVertexAttributeTypes = 1;
- myTriMeshData.vertexAttributeTypes = &vertexAttribs[0];
-
-
- /* CALCULATE BOUNDING BOX */
-
- Q3BoundingBox_SetFromPoints3D(&myTriMeshData.bBox, &points[0], 3, sizeof(TQ3Point3D));
-
-
- /* CREATE FACE ATTRIBUTES */
-
- faceAttribs.attributeType = kQ3AttributeTypeNormal;
- faceAttribs.data = &faceNormals[0];
- faceAttribs.attributeUseArray = nil;
-
-
- /* CREATE VERTEX ATTRIBUTES */
-
- vertexAttribs[0].attributeType = kQ3AttributeTypeSurfaceUV;
- vertexAttribs[0].data = &uvArray[0];
- vertexAttribs[0].attributeUseArray = nil;
-
-
- /* MAKE THE TRIMESH GEOMETRY OBJECT */
-
- gModelGroup = Q3TriMesh_New(&myTriMeshData);
- if (gModelGroup == nil)
- DoFatalAlert("\pQ3TriMesh_New failed!");
-
-
- }
-
-
- #pragma mark =========UPDATING============
-
-
- /*************** DO MODEL WINDOW NULL EVENT **********************/
-
- void DoModelWindowNullEvent(void)
- {
- TQ3Matrix4x4 m;
-
- /* ROTATE THE GEOMETRY */
-
- QD3D_CalcFramesPerSecond();
- Q3Matrix4x4_SetRotate_XYZ(&m,0.4/gFramesPerSecond,0.5/gFramesPerSecond,0);
- Q3Matrix4x4_Multiply(&m,&gTransformMatrix,&gTransformMatrix);
-
-
- /* UPDATE THE MATRIX */
-
- Q3MatrixTransform_Set(gTransformObject,&gTransformMatrix);
-
-
- /* REDRAW IT */
-
- DrawModelWindow();
- }
-
-
- /******************* DRAW MODEL WINDOW *********************/
- //
- // Calls the support function QD3D_DrawScene.
- // It passes the view info and a pointer to the game draw callback.
- //
-
- void DrawModelWindow(void)
- {
- QD3D_DrawScene(&gModelViewInfo,(void *)SubmitFogAndGeometry);
- }
-
-
- /*************** SUBMIT FOG AND GEOMETRY ******************/
-
- void SubmitFogAndGeometry(QD3DSetupOutputType *viewInfo)
- {
- // Q3Style_Submit(gFogStyleObject,viewInfo->viewObject); // submit the fog style
- // Q3FogStyle_Submit(&gFogData,viewInfo->viewObject); // submit fog in immediate mode
-
- Q3Object_Submit(gBaseGroup,viewInfo->viewObject); // submit the geometry
- }
-
-
-
-
-
-
-
-
-
-
-